<?php
	/**
	  * @package	MyDebuger
	  * @name		HTMLFormatter
	  * @brief		Classe abstracta para la utilizacion de mensajes con colores y formatos
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://opensource.org/licenses/gpl-2.0.php
	  * @date		2009-12-28
	  * @version	0.1.1
  	**/

	abstract class HTMLFormatter implements MyVersions {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 1;
		/* numero de revision de la clase */
		private static $revision		= 1;

		/* constante con el valor para italic */
		const	ITALIC		= 'font-style:italic';
		/* constante con el valor para bold */
		const	BOLD			= 'font-weight:bold';
		/* constante con el valor para underline */
		const	UNDERLINE	= 'text-decoration:underline';
		/* constante con el valor para blink */
		const	BLINK			= 'text-decoration:blink';

		/* valor para el color rojo */
		private $redColor				= 'c00';
		/* valor para el color verde */
		private $greenColor			= '060';
		/* valor para el color azul */
		private $blueColor			= '00a';
		/* valor para el color amarillo */
		private $yellowColor			= 'ca0';

		public static function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		protected final function italic($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, HTMLFormatter::ITALIC);
		}

		protected final function bold($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, HTMLFormatter::BOLD);
		}

		protected final function underline($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, HTMLFormatter::UNDERLINE);
		}

		protected final function blink($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, HTMLFormatter::BLINK);
		}

		protected final function red($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, "color:#{$this->redColor}");
		}

		protected final function green($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, "color:#{$this->greenColor}");
		}

		protected final function blue($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, "color:#{$this->blueColor}");
		}

		protected final function yellow($stringText = Null) {
			/* formateamos y retornamos la cadena formateada */
			return $this->getFormat($stringText, "color:#{$this->yellowColor}");
		}

		protected final function classFormat($stringText = Null) {
			/* formateamos y retornamos la cadena */
			return $this->italic($this->bold($this->blue($stringText)));
		}

		protected final function methodFormat($stringText = Null) {
			/* formateamos y retornamos la cadena */
			return $this->italic($this->blue($stringText));
		}

		protected final function attrFormat($stringText = Null) {
			/* formateamos y retornamos la cadena */
			return $this->italic($this->bold($this->green($stringText)));
		}

		protected final function paramFormat($stringText = Null) {
			/* formateamos y retornamos la cadena */
			return $this->italic($this->yellow($stringText));
		}

		protected final function fileFormat($stringFile = Null, $onlyBase = False) {
			/* retornamos el nombre del fichero con formato */
			return $this->italic($this->yellow(
				/* verificamos si es solo el nombre del fichero */
				$onlyBase === False ?
				/* enviamos la ruta completa */
				$stringFile :
				/* enviamos solo el nombre del fichero */
				basename($stringFile)
			));
		}

		protected function cleanHTML($stringText) {
			/* reemplazamos algunos simbolos especiales por su codigo */
			$stringText = str_replace(Array('<', '>'), Array('&lt;', '&gt;'), $stringText);
			/* retornamos la cadena formateada */
			return str_replace(Array('|font', '|/font|', '\'|'), Array('<font', '</font>', '\'>'), $stringText);
		}

		private function getFormat($text, $style) {
			/* verificamos la cadena ingresada */
			$this->verificarCadena($text);
			/* retornamos la cadena con formato */
			return "|font style='$style;'|$text|/font|";
		}

		private function verificarCadena($cadena = Null) {
			/* verificamos si especifico la cadena */
			if ($cadena === Null)
				/* salimos con una excepcion */
				$this->newException('No se especifico la cadena a formatear');
		}
	}
?>